﻿using DataAccess;
using System;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using NLog;

namespace QuanLyKhachSan
{
    public partial class frmThongTinHoaDonThuePhong : XtraForm
    {
        HoaDonThuePhongManager controller = new HoaDonThuePhongManager();
        protected static Logger _logger = LogManager.GetCurrentClassLogger();
        bool them = false;
        public HoaDonThuePhong hdtp = null;
        public bool themthanhcong=false;
        public bool capnhatthanhcong = false;
        bool saukhibatchitiethoadon = false;
        public frmThongTinHoaDonThuePhong(HoaDonThuePhong hdtp,bool saukhibatchitiethoadon)
        {
            InitializeComponent();
            this.hdtp = hdtp;
            this.saukhibatchitiethoadon = saukhibatchitiethoadon;
        }

        public frmThongTinHoaDonThuePhong(bool them)
        {
            InitializeComponent();
            this.them = them;
            hdtp = new HoaDonThuePhong();
        }

        public frmThongTinHoaDonThuePhong(HoaDonThuePhong hdtp)
        {
            InitializeComponent();
            this.hdtp = hdtp;
        }

        private void frmThongTinHoaDonThuePhong_Load(object sender, EventArgs e)
        {
            this.nhanVienTableAdapter.Fill(this.qLKHACHSANDataSet.NhanVien);
            cbNhanVien.SelectedIndex = -1;
            LoadForm();
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (them)
            {
                ThemHoaDon();
            }
            else
            {
                CapNhatHoaDon();
            }
        }

        private void ThemHoaDon()
        {
            if (cbTrangThai.Text == "Đã thanh toán" && (cbNhanVien.SelectedIndex == -1 || txtTongTien.Text == "" || txtTienDatCoc.Text == "" || txtTenNguoiDat.Text == "" || dtpNgayDen.Text == "" || dtpNgayDi.Text == "" || dtpNgayDenDK.Text == "" || dtpNgayLapHD.Text == ""))
            {
                string s = "";
                {
                    s += "Muốn cập nhật hóa đơn thuê phòng thành đã thanh toán phải nhập đầy đủ thông tin";
                }
                MessageBox.Show(s);
            }
            else
            {
                if (cbNhanVien.SelectedIndex != -1)
                {
                    hdtp.MaNV = int.Parse(cbNhanVien.SelectedValue + "");
                }
                else
                {
                    hdtp.MaNV = 0;
                }
                hdtp.HoTenNguoiDat = txtTenNguoiDat.Text;
                if (dtpNgayLapHD.EditValue + "" != "")
                {
                    hdtp.NgayLapHD = (DateTime)dtpNgayLapHD.EditValue;
                }
                else
                {
                    hdtp.NgayLapHD = null;
                }

                if (dtpNgayDi.EditValue + "" != "")
                {
                    hdtp.NgayDi = (DateTime)dtpNgayDi.EditValue;
                }
                else
                {
                    hdtp.NgayDi = null;
                }
                if (dtpNgayDenDK.EditValue + "" != "")
                {
                    hdtp.NgayDenDuKien = (DateTime)dtpNgayDenDK.EditValue;
                }
                else
                {
                    hdtp.NgayLapHD = null;
                }

                if (dtpNgayDen.EditValue + "" != "")
                {
                    hdtp.NgayDen = (DateTime)dtpNgayDen.EditValue;
                }
                else
                {
                    hdtp.NgayDen = null;
                }
                if (txtTienDatCoc.Text != "")
                {
                    try
                    {
                        hdtp.TienDatCoc = decimal.Parse(txtTienDatCoc.Text);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Phải nhập đúng định dạng số thực");
                    }
                }
                else
                {
                    hdtp.TienDatCoc = 0;
                }

                txtTongTien.Enabled = false;
                decimal tongtien = 0;
                foreach (var item in hdtp.ChiTietHoaDonThuePhongs)
                {
                    if (dtpNgayDi.Text != "" && dtpNgayDen.Text != "")
                    {
                        tongtien += item.Phong.LoaiPhong.GiaPhong * (decimal)(item.HoaDonThuePhong.NgayDi.Value - item.HoaDonThuePhong.NgayDen.Value).TotalDays;
                    }
                }
                hdtp.TongTienThuePhong = tongtien;

                hdtp.TrangThai = cbTrangThai.Text;
                var vResult = controller.Validate(hdtp);
                if (!vResult.Message.Any())
                {
                    var aResult = controller.Them(hdtp);
                    if (!aResult.Exceptions.Any())
                    {
                        MessageBox.Show("Thêm thành công hóa đơn ID= " + hdtp.MaHD);
                        _logger.Info("Thêm thành công hóa đơn ID= " + hdtp.MaHD);
                        themthanhcong = true;
                        this.Close();
                    }
                    else
                    {
                        string s = "";
                        foreach (var ex in aResult.Exceptions)
                        {
                            s += ex.Message + "\n";
                        }
                        MessageBox.Show(s);
                        _logger.Error(s);
                    }
                }
                else
                {
                    string s = "";
                    foreach (var ex in vResult.Message)
                    {
                        s += ex + "\n";
                    }
                    MessageBox.Show(s);
                    _logger.Error(s);
                }
            }
        }

        private void CapNhatHoaDon()
        {
            if (cbTrangThai.Text == "Đã thanh toán" && (cbNhanVien.SelectedIndex == -1 || txtTongTien.Text == "" || txtTienDatCoc.Text == "" || txtTenNguoiDat.Text == "" || dtpNgayDen.Text == "" || dtpNgayDi.Text == "" || dtpNgayDenDK.Text == "" || dtpNgayLapHD.Text == ""))
            {
                string s = "";
                {
                    s += "Muốn cập nhật hóa đơn thuê phòng thành đã thanh toán phải nhập đầy đủ thông tin";
                }
                MessageBox.Show(s);
                _logger.Error(s);
            }
            else
            {
                if (cbNhanVien.SelectedIndex != -1)
                {
                    hdtp.MaNV = int.Parse(cbNhanVien.SelectedValue + "");
                }
                else
                {
                    hdtp.MaNV = -1;
                }
                hdtp.HoTenNguoiDat = txtTenNguoiDat.Text;
                hdtp.NgayLapHD = DateTime.Parse(dtpNgayLapHD.Text);
                if (dtpNgayDi.EditValue + "" != "")
                {
                    hdtp.NgayDi = DateTime.Parse(dtpNgayDi.Text);
                }
                else
                {
                    hdtp.NgayDi = null;
                }
                hdtp.NgayDenDuKien = DateTime.Parse(dtpNgayDenDK.Text); ;
                if (dtpNgayDen.EditValue + "" != "")
                {
                    hdtp.NgayDen = DateTime.Parse(dtpNgayDen.Text);
                }
                else
                {
                    hdtp.NgayDen = null;
                }
                if (txtTienDatCoc.Text != "")
                {
                    try
                    {
                        hdtp.TienDatCoc = decimal.Parse(txtTienDatCoc.Text);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Phải nhập đúng định dạng số thực");
                    }
                }
                else
                {
                    hdtp.TienDatCoc = 0;
                }
                txtTongTien.Enabled = false;
                decimal tongtien = 0;
                foreach (var item in hdtp.ChiTietHoaDonThuePhongs)
                {
                    if (dtpNgayDi.Text != "" && dtpNgayDen.Text != "")
                    {
                        tongtien += item.Phong.LoaiPhong.GiaPhong * (decimal)(item.HoaDonThuePhong.NgayDi.Value - item.HoaDonThuePhong.NgayDen.Value).TotalDays;
                    }
                }
                hdtp.TongTienThuePhong = tongtien;
                hdtp.TrangThai = cbTrangThai.Text;
                var vResult = controller.Validate(hdtp);
                if (!vResult.Message.Any())
                {
                    var aResult = controller.CapNhat(hdtp);
                    if (!aResult.Exceptions.Any())
                    {
                        MessageBox.Show("Cập nhật thành công hóa đơn ID= " + hdtp.MaHD);
                        capnhatthanhcong = true;
                        _logger.Info("Cập nhật thành công hóa đơn ID= " + hdtp.MaHD);
                        this.Close();
                    }
                    else
                    {
                        string s = "";
                        foreach (var ex in aResult.Exceptions)
                        {
                            s += ex.Message + "\n";
                        }
                        _logger.Error(s);
                        MessageBox.Show(s);
                    }
                }
                else
                {
                    string s = "";
                    foreach (var ex in vResult.Message)
                    {
                        s += ex + "\n";
                    }
                    MessageBox.Show(s);
                    _logger.Error(s);
                }
            }
            
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            LoadForm();
        }

        private void LoadForm()
        {

            if (them)
            {
                txtMaHD.Text = "";
                cbNhanVien.SelectedIndex = -1;
                txtTenNguoiDat.Text = "";
                txtTienDatCoc.Text = "";
                txtTongTien.Enabled = false;
                txtTongTien.Text = "";
                cbTrangThai.Text = "";
                dtpNgayDen.EditValue = "";
                dtpNgayDenDK.EditValue = "";
                dtpNgayDi.EditValue = "";
                dtpNgayLapHD.EditValue = "";
            }
            else
            {
                if (saukhibatchitiethoadon)
                {
                    btnThoat.Enabled = false;
                    this.ControlBox = false;
                }
                txtMaHD.Text = hdtp.MaHD + ""; txtMaHD.Enabled = false;
                cbNhanVien.SelectedValue = hdtp.MaNV;
                txtTenNguoiDat.Text = hdtp.HoTenNguoiDat;
                txtTienDatCoc.Text = hdtp.TienDatCoc+"";
                decimal tongtien = 0;
                foreach (var item in hdtp.ChiTietHoaDonThuePhongs)
                {
                    if (item.HoaDonThuePhong.NgayDi!=null&&item.HoaDonThuePhong.NgayDen!=null)
                    {
                        tongtien += item.Phong.LoaiPhong.GiaPhong * (decimal)(item.HoaDonThuePhong.NgayDi.Value - item.HoaDonThuePhong.NgayDen.Value).TotalDays;
                    }
                }
                txtTongTien.Text = tongtien+"";
                txtTongTien.Enabled = false;
                cbTrangThai.Text = hdtp.TrangThai;
                dtpNgayDen.EditValue = hdtp.NgayDen!=null?hdtp.NgayDen.GetValueOrDefault().ToShortDateString():"";
                dtpNgayDenDK.EditValue = hdtp.NgayDenDuKien;
                dtpNgayDi.EditValue = hdtp.NgayDi != null ? hdtp.NgayDi.GetValueOrDefault().ToShortDateString() : "";
                dtpNgayLapHD.EditValue = hdtp.NgayLapHD;
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dtpNgayDi_EditValueChanged(object sender, EventArgs e)
        {
            decimal tongtien = 0;
            foreach (var item in hdtp.ChiTietHoaDonThuePhongs)
            {
                if (dtpNgayDi.Text != "" && dtpNgayDen.Text != "")
                {
                    if (dtpNgayDi.Text != "" && dtpNgayDen.Text!="")
                    {
                        tongtien += item.Phong.LoaiPhong.GiaPhong * (decimal)(DateTime.Parse(dtpNgayDi.Text) - DateTime.Parse(dtpNgayDen.Text)).TotalDays;
                    }
                }
            }
            txtTongTien.Text = tongtien + "";
        }
    }
}
